package org.juc.stream;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 流演示
 * 题目：请按照给出数据，找出同时满足以下条件的用户，也即以下条件全部满足偶数ID日年龄大于24日用户名转为大写且用户名字母倒排序只输出一个用户名字
 * @author Admin
 * @date 2021/11/30
 */
public class StreamDemo {
    public static void main(String[] args) {
        User u1=new User(11, "a", 23);
        User u2=new User(12, "b", 24);
        User u3=new User(13, "c", 22);
        User u4=new User(14, "d", 28);
        User u5=new User(16, "e", 26);
        List<User> list= Arrays. asList(u1,u2,u3,u4,u5);

        List<String> collect =
                // list转流
                list.stream()
                // 过滤出用户Id为偶数 【filter接口传入Predicate类型判断业务接口实现类 返回boolean】
                .filter(user -> user.getId() % 2 == 0)
                // 过滤出用户年龄大于24 相当mysql的 age>24 【filter接口传入Predicate类型判断业务接口实现类 返回boolean】
                .filter(user -> user.getAge() > 24)
                // map为映射，将得到的结果进行转换大写 【map接口传入Function类型函数接口实现类 传入User类型，返回是String类型】
                .map(user -> user.getUsername().toUpperCase())
                // 进行排序 相当于mysql的orderby
                .sorted(Comparator.reverseOrder())
                // 跟mysql一样 取一个用户
                .limit(1)
                // 最后将流转换为List
                .collect(Collectors.toList());
        // 这些接口都做了简化，简化了类型推断 简化了返回值和大花括号
        collect.forEach(System.out::println);
    }
}
